﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Asociatie_de_propietari
{
    class Program
    {
        static void Main(string[] args)
        {

            List<Asociatie> asociatii = new List<Asociatie>();


            while (true)
            {
                meniu();
                int optiuneAleasa=0;

                try
                {
                    optiuneAleasa = int.Parse(Console.ReadLine());
                }
                catch
                {
                    optiuneAleasa = 65456;
                }

                if (optiuneAleasa == 1)
                {
                    //adaugam asociatie
                    AdaugaAsociatie(asociatii);
                    
                }
                else if (optiuneAleasa == 2)
                {
                    //Listam asociatiile
                    ListeazaAsociatii(asociatii);
                }
                else if (optiuneAleasa == 3)
                {
                    AfiseazaMeniuAdaugaBloc(asociatii);


                }
                else if (optiuneAleasa == 0)
                {
                    //Iesim
                    Environment.Exit(0);
                }
                else
                {
                    Console.WriteLine("Boule! Din meniu bah tampitule!");
                }
            }         

            


        }

        private static void AfiseazaMeniuAdaugaBloc(List<Asociatie> asociatii)
        {
            if (asociatii.Count == 0)
            {
                Console.WriteLine("Trebuie sa adugati o asociatie");
                return;
            }


            //II dam lista de asociatii
            ListeazaAsociatii(asociatii);

            Console.Write("Introduceti numarul asociatiei la care vreti sa adaugati bloc: ");
            try
            {
                int indexAsociatie = 0;
                indexAsociatie = int.Parse(Console.ReadLine());

                indexAsociatie--;

                //Verificam ca indexul se afla in limita listei de asociatii
                if (indexAsociatie < 0 || indexAsociatie >= asociatii.Count)
                {
                    Console.WriteLine("Index invalid!");
                    return;
                }

                Asociatie asLaCareAdaugam = asociatii[indexAsociatie];

                asLaCareAdaugam.AdaugaBloc();
            }
            catch
            {
            }
        }

        /// <summary>
        /// Functie pentru meniu
        /// </summary>
        static void meniu()
        {
            Console.WriteLine();
            Console.WriteLine("---------------------------------------------");
            Console.WriteLine("-- MENIU --");
            Console.WriteLine("1) Adauga asociatie");
            Console.WriteLine("2) Afiseaza asociatiile");
            Console.WriteLine("3) Adauga bloc la asociatie"); 



            Console.WriteLine("0) Exit");
            Console.WriteLine("---------------------------------------------");
            Console.WriteLine("Introduceti optiunea din meniu:");
        }


        /// <summary>
        /// Functie care adauga o asociatie
        /// </summary>
        /// <param name="listaInCareAdaug">Lista in care se adauga noua asociatie</param>
        static void AdaugaAsociatie(List<Asociatie> listaInCareAdaug)
        {
            Console.WriteLine();

            Asociatie nouaAsociatie = new Asociatie();


            
            Console.WriteLine("---------------------------------------------");
            Console.Write("Introduceti numele asociatiei: ");
            nouaAsociatie.nume = Console.ReadLine();

            listaInCareAdaug.Add(nouaAsociatie);

            Console.WriteLine("Asociatia cu numele " + nouaAsociatie.nume + " a fost adaugata!");
            Console.WriteLine("---------------------------------------------");
            
        }



        /// <summary>
        /// Functie care listeaza asociatiile din o lista
        /// </summary>
        /// <param name="listaDeListat">Lista de asociatii pe care o afisam</param>
        static void ListeazaAsociatii(List<Asociatie> listaDeListat)
        {
            Console.WriteLine();
            Console.WriteLine("------------LISTA DE ASOCIATII------------");
            for (int a = 0; a < listaDeListat.Count; a++)
            {
                Console.WriteLine((a + 1) + ") " + listaDeListat[a].nume + " are " + listaDeListat[a].blocuri.Count + " blocuri");

               
                if (listaDeListat[a].blocuri.Count != 0)
                {
                    Console.Write("\t");
                    Console.Write("Lista nr. blocuri din asociatie: ");
                    for (int b = 0; b < listaDeListat[a].blocuri.Count; b++)
                    {
                        Console.Write(listaDeListat[a].blocuri[b].NrBloc + ", ");
                    }

                    Console.WriteLine();
                }

            }
            Console.WriteLine("---------------------------------------------");
        }

    }




}
